package com.greate.community.dao;

import com.greate.community.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

@Mapper
public interface UserMapper {

    /**
     * 根据 id 查询用户
     */
    User selectById(int id);

    /**
     * 根据 id 查询用户（包括实名信息）
     */
    User selectAllById(int id);

    /**
     * 根据 username 查询用户
     */
    User selectByName(String username);

    /**
     * 根据 email 查询用户
     */
    User selectByEmail(String email);

    /**
     * 插入用户（注册）
     */
    int insertUser(User user);

    /**
     * 修改用户状态
     */
    int updateStatus(int id, int status);

    /**
     * 修改头像
     */
    int updateHeader(int id, String headerUrl);

    /**
     * 修改用户名
     */
    int updateUsername(int id, String username);

    /**
     * 修改密码
     */
    int updatePassword(int id, String password);

    /**
     * 修改经验值和等级
     */
    int updateExpAndLevel(int id, int exp, int level);

    /**
     * 修改用户实名信息审核状态，
     * 当审核通过时，同时修改用户身份为实名用户huster
     */
    int updateAuditStatus(int id, int auditStatus);

    /**
     * 分页查询实名信息（已激活的用户）
     *
     * @param auditStatus 当传入的 auditStatus = 0 时,查找所有 未上传学生证图片 的用户信息
     *                    当传入的 auditStatus = 1 时,查找所有 未审核 的用户信息
     *                    当传入的 auditStatus = 2 时,查找所有 审核通过 的用户信息
     *                    当传入的 auditStatus = 3 时,查找所有 审核驳回 的用户信息
     * @param offset 每页的起始索引
     * @param limit  每页显示多少条数据
     * @param detailed  是否查询实名详细信息，0-简略信息，1-详细信息
     * @return
     */
    List<User> selectRealNameList(int auditStatus, int offset, int limit, int detailed);

    /**
     * 查询实名用户个数
     * @param auditStatus 当传入的 auditStatus = 0 时,查找所有 未上传学生证图片 的用户信息
     *                    当传入的 auditStatus = 1 时,查找所有 未审核 的用户信息
     *                    当传入的 auditStatus = 2 时,查找所有 审核通过 的用户信息
     *                    当传入的 auditStatus = 3 时,查找所有 审核驳回 的用户信息
     * @return
     */
    int selectRealNameRows(int auditStatus);

    /**
     * 依据userId查询用户实名详细信息
     * @param id 用户id
     * @return
     */
    User selectRealNameUserById(int id);

    /**
     * 更新用户实名信息
     */
    int updateRealNameInfo(User user);

    /**
     * 增加点赞数
     * @param id
     * @param likeCount
     * @return
     */
    int addLikeCount(int id, int likeCount);

    /**
     * 根据 openid 查询用户
     */
    User selectByOpenid(String openid);
}
